6

您所在的位置:网站首页 6 1 单链表结点删除 6

6

2023-07-31 05:50| 来源: 网络整理| 查看: 265

本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中所有存储了某给定值的结点删除。链表结点定义如下:

struct ListNode { int data; ListNode *next; };

函数接口定义:

struct ListNode *readlist(); struct ListNode *deletem( struct ListNode *L, int m );

函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链表头结点的指针。

函数deletem将单链表L中所有存储了m的结点删除。返回指向结果链表头结点的指针。 裁判测试程序样例:

#include #include struct ListNode { int data; struct ListNode *next; }; struct ListNode *readlist(); struct ListNode *deletem( struct ListNode *L, int m ); void printlist( struct ListNode *L ) { struct ListNode *p = L; while (p) { printf("%d ", p->data); p = p->next; } printf("\n"); } int main() { int m; struct ListNode *L = readlist(); scanf("%d", &m); L = deletem(L, m); printlist(L); return 0; }

/* 你的代码将被嵌在这里 */

输入样例:

10 11 10 12 10 -1 10

输出样例:

11 12

struct ListNode *readlist(){ struct ListNode *p,*head,*tail; head=NULL; int score; while(1){ p=(struct ListNode *)malloc(sizeof(struct ListNode )); scanf("%d",&score); if(score==-1) break; p->data=score; p->next=NULL; if(head==NULL) head=p; else tail->next=p; tail=p; } return head; } struct ListNode *deletem( struct ListNode *head, int min ){ struct ListNode * p1,* p2; while(head!=NULL&&head->data==min){ p2=head; head=head->next; free(p2); } if(head==NULL) return NULL; p1=head; p2=head->next; while(p2!=NULL){ if(p2->data==min){ p1->next=p2->next; free(p2); } else p1=p2; p2=p1->next; } return head; }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3